package com.expert.miniapp.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 科研专家数据访问层接口
 * 提供专家信息的查询功能
 */
@Mapper
public interface ResearchExpertMapper {

    /**
     * 根据专家ID精确查询单个专家
     * @param expertId 专家ID
     * @return 专家信息，如果不存在则返回null
     */
    ResearchExpert findById(@Param("expertId") String expertId);

    /**
     * 根据分类查询专家列表
     * 使用FIND_IN_SET函数在categories字段中查找匹配的分类
     * @param category 分类名称
     * @return 匹配该分类的专家列表
     */
    List<ResearchExpert> findByCategory(@Param("category") String category);

    /**
     * 查询所有专家列表
     * @return 所有专家信息列表
     */
    List<ResearchExpert> findAll();

    /**
     * 按权重排序查询专家列表（用于推荐）
     * @return 按权重降序排列的专家列表
     */
    List<ResearchExpert> findByWeightOrder();

    /**
     * 模糊搜索专家
     * @param keyword 搜索关键词
     * @return 匹配关键词的专家列表
     */
    List<ResearchExpert> searchByKeyword(@Param("keyword") String keyword);

    /**
     * 根据分类统计专家数量
     * @param category 分类名称（如："人工智能"）
     * @return 包含该分类的专家数量
     */
    Integer countByCategory(@Param("category") String category);
}